using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CartographyTools._Masking
{
    /// <summary>
    /// <para>Cul-De-Sac Masks</para>
    /// <para>Creates a feature class of polygon masks from a symbolized input line layer.</para>
    /// <para>从符号化输入线图层创建面蒙版要素类。</para>
    /// </summary>    
    [DisplayName("Cul-De-Sac Masks")]
    public class CulDeSacMasks : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CulDeSacMasks()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_layer">
        /// <para>Input Layer</para>
        /// <para>The input line layer from which the masks will be created.</para>
        /// <para>将从中创建蒙版的输入线图层。</para>
        /// </param>
        /// <param name="_output_fc">
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will contain the mask features.</para>
        /// <para>将包含蒙版要素的要素类。</para>
        /// </param>
        /// <param name="_reference_scale">
        /// <para>Reference Scale</para>
        /// <para>The reference scale used for calculating the masking geometry when masks are specified in page units. This is typically the reference scale of the map.</para>
        /// <para>当以页面单位指定蒙版时，用于计算遮罩几何图形的参考比例。这通常是地图的参考比例。</para>
        /// </param>
        /// <param name="_spatial_reference">
        /// <para>Calculation coordinate system</para>
        /// <para>The spatial reference of the map in which the masking polygons will be created. This is not the spatial reference that will be assigned to the output feature class. It is the spatial reference of the map in which the masking polygons will be used, since the position of symbology may change when features are projected.</para>
        /// <para>将在其中创建遮罩面的地图的空间参考。这不是将分配给输出要素类的空间参考。它是将使用遮罩面的地图的空间参考，因为在投影要素时符号系统的位置可能会发生变化。</para>
        /// </param>
        /// <param name="_margin">
        /// <para>Margin</para>
        /// <para><xdoc>
        ///   <para>The space in page units surrounding the symbolized input features used to create the mask polygons. Typically, masking polygons are created with a small margin around the symbol to improve visual appearance. Margin values are specified in either page units or map units. Most of the time, you will specify your margin distance value in page units.</para>
        ///   <para>The margin cannot be negative.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于创建蒙版面的符号化输入要素周围的空间（以页面单位为单位）。通常，在创建遮罩面时，符号周围留有很小的边距，以改善视觉外观。页边距值以页面单位或地图单位指定。大多数情况下，您将以页面单位指定边距值。</para>
        ///   <para>边距不能为负数。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_attributes">
        /// <para>Transfer Attributes</para>
        /// <para><xdoc>
        ///   <para>Specifies the attributes that will be transferred from the input features to the output features.</para>
        ///   <bulletList>
        ///     <bullet_item>Only feature IDs—Only the FID field from the input features will be transferred to the output features. This is the default.</bullet_item><para/>
        ///     <bullet_item>All attributes except feature IDs—All the attributes except the FID from the input features will be transferred to the output features.</bullet_item><para/>
        ///     <bullet_item>All attributes—All the attributes from the input features will be transferred to the output features.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将从输入要素传输到输出要素的属性。</para>
        ///   <bulletList>
        ///     <bullet_item>仅要素 ID - 仅将输入要素中的 FID 字段传输到输出要素。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>除要素 ID 之外的所有属性—输入要素中除 FID 之外的所有属性都将传输到输出要素。</bullet_item><para/>
        ///     <bullet_item>所有属性—输入要素中的所有属性都将传输到输出要素。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public CulDeSacMasks(object _input_layer, object _output_fc, double? _reference_scale, object _spatial_reference, string _margin, _attributes_value _attributes)
        {
            this._input_layer = _input_layer;
            this._output_fc = _output_fc;
            this._reference_scale = _reference_scale;
            this._spatial_reference = _spatial_reference;
            this._margin = _margin;
            this._attributes = _attributes;
        }
        public override string ToolboxName => "Cartography Tools";

        public override string ToolName => "Cul-De-Sac Masks";

        public override string CallName => "cartography.CulDeSacMasks";

        public override List<string> AcceptEnvironments => ["cartographicCoordinateSystem"];

        public override object[] ParameterInfo => [_input_layer, _output_fc, _reference_scale, _spatial_reference, _margin, _attributes.GetGPValue()];

        /// <summary>
        /// <para>Input Layer</para>
        /// <para>The input line layer from which the masks will be created.</para>
        /// <para>将从中创建蒙版的输入线图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_layer { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will contain the mask features.</para>
        /// <para>将包含蒙版要素的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_fc { get; set; }


        /// <summary>
        /// <para>Reference Scale</para>
        /// <para>The reference scale used for calculating the masking geometry when masks are specified in page units. This is typically the reference scale of the map.</para>
        /// <para>当以页面单位指定蒙版时，用于计算遮罩几何图形的参考比例。这通常是地图的参考比例。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reference Scale")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public double? _reference_scale { get; set; }


        /// <summary>
        /// <para>Calculation coordinate system</para>
        /// <para>The spatial reference of the map in which the masking polygons will be created. This is not the spatial reference that will be assigned to the output feature class. It is the spatial reference of the map in which the masking polygons will be used, since the position of symbology may change when features are projected.</para>
        /// <para>将在其中创建遮罩面的地图的空间参考。这不是将分配给输出要素类的空间参考。它是将使用遮罩面的地图的空间参考，因为在投影要素时符号系统的位置可能会发生变化。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calculation coordinate system")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _spatial_reference { get; set; }


        /// <summary>
        /// <para>Margin</para>
        /// <para><xdoc>
        ///   <para>The space in page units surrounding the symbolized input features used to create the mask polygons. Typically, masking polygons are created with a small margin around the symbol to improve visual appearance. Margin values are specified in either page units or map units. Most of the time, you will specify your margin distance value in page units.</para>
        ///   <para>The margin cannot be negative.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于创建蒙版面的符号化输入要素周围的空间（以页面单位为单位）。通常，在创建遮罩面时，符号周围留有很小的边距，以改善视觉外观。页边距值以页面单位或地图单位指定。大多数情况下，您将以页面单位指定边距值。</para>
        ///   <para>边距不能为负数。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Margin")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string _margin { get; set; }


        /// <summary>
        /// <para>Transfer Attributes</para>
        /// <para><xdoc>
        ///   <para>Specifies the attributes that will be transferred from the input features to the output features.</para>
        ///   <bulletList>
        ///     <bullet_item>Only feature IDs—Only the FID field from the input features will be transferred to the output features. This is the default.</bullet_item><para/>
        ///     <bullet_item>All attributes except feature IDs—All the attributes except the FID from the input features will be transferred to the output features.</bullet_item><para/>
        ///     <bullet_item>All attributes—All the attributes from the input features will be transferred to the output features.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将从输入要素传输到输出要素的属性。</para>
        ///   <bulletList>
        ///     <bullet_item>仅要素 ID - 仅将输入要素中的 FID 字段传输到输出要素。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>除要素 ID 之外的所有属性—输入要素中除 FID 之外的所有属性都将传输到输出要素。</bullet_item><para/>
        ///     <bullet_item>所有属性—输入要素中的所有属性都将传输到输出要素。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Transfer Attributes")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _attributes_value _attributes { get; set; }

        public enum _attributes_value
        {
            /// <summary>
            /// <para>All attributes except feature IDs</para>
            /// <para>All attributes except feature IDs—All the attributes except the FID from the input features will be transferred to the output features.</para>
            /// <para>除要素 ID 之外的所有属性—输入要素中除 FID 之外的所有属性都将传输到输出要素。</para>
            /// </summary>
            [Description("All attributes except feature IDs")]
            [GPEnumValue("NO_FID")]
            _NO_FID,

            /// <summary>
            /// <para>Only feature IDs</para>
            /// <para>Only feature IDs—Only the FID field from the input features will be transferred to the output features. This is the default.</para>
            /// <para>仅要素 ID - 仅将输入要素中的 FID 字段传输到输出要素。这是默认设置。</para>
            /// </summary>
            [Description("Only feature IDs")]
            [GPEnumValue("ONLY_FID")]
            _ONLY_FID,

            /// <summary>
            /// <para>All attributes</para>
            /// <para>All attributes except feature IDs—All the attributes except the FID from the input features will be transferred to the output features.</para>
            /// <para>除要素 ID 之外的所有属性—输入要素中除 FID 之外的所有属性都将传输到输出要素。</para>
            /// </summary>
            [Description("All attributes")]
            [GPEnumValue("ALL")]
            _ALL,

        }

        public CulDeSacMasks SetEnv(object cartographicCoordinateSystem = null)
        {
            base.SetEnv(cartographicCoordinateSystem: cartographicCoordinateSystem);
            return this;
        }

    }

}